package com.sgcc.sx.pmos.e_sx_mall.fragment;

import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.TextView;

import com.bigkoo.pickerview.builder.TimePickerBuilder;
import com.bigkoo.pickerview.listener.OnTimeSelectListener;
import com.bigkoo.pickerview.view.TimePickerView;
import com.blankj.utilcode.util.TimeUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.core.BasePopupView;
import com.sgcc.sx.pmos.common.base.MvpBaseFragment;
import com.sgcc.sx.pmos.common.bean.BaseResponse;
import com.sgcc.sx.pmos.common.bean.EventCenter;
import com.sgcc.sx.pmos.common.dialog.DisclaimersPopView;
import com.sgcc.sx.pmos.common.utils.ArguConstant;
import com.sgcc.sx.pmos.common.widget.TagOtherView;
import com.sgcc.pmos.nativesdk.R;
import com.sgcc.sx.pmos.e_sx_mall.bean.DataSelect;
import com.sgcc.sx.pmos.e_sx_mall.bean.OrderContentBean;
import com.sgcc.sx.pmos.e_sx_mall.contract.AuthorizeContract;
import com.sgcc.sx.pmos.e_sx_mall.presenter.AuthprizePresenter;

import org.greenrobot.eventbus.EventBus;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;


//议价下单页面中历史数据授权页面
public class AuthorizeFragment extends MvpBaseFragment<AuthprizePresenter> implements AuthorizeContract.View {
    TextView commitOrder;
    RadioGroup radioGroup;

    LinearLayout start_data, end_data;
    TextView start_month_txt, end_month_txt;

    List<Integer> yearList = new ArrayList<>();
    List<List<Integer>> monthList = new ArrayList<>();

    List<Integer> yearListEnd = new ArrayList<>();
    List<List<Integer>> monthListEnd = new ArrayList<>();
    int sysStartYear = 0;
    int sysStartMonth = 0;
    int sysEndYear = 0;
    int sysEndMonth = 0;


    int userStartYear = 0;
    int userStartMonth = 0;
    boolean isStartDataSelect = true;

    OrderContentBean mContent = new OrderContentBean();
    EditText content_edit;
    DataSelect dataSelect;
    TimePickerView pvTime, pvTimeEnd;
    Calendar startDate = Calendar.getInstance();
    Calendar endDate = Calendar.getInstance();
    Calendar userStartDate = Calendar.getInstance();
    String MsgCode = "";
    TagOtherView tagOtherView;

    @Override
    protected int getContentViewLayoutID() {
        return R.layout.fragment_authorize;
    }

    private void initTime() {
        String timeStr = TimeUtils.getNowString();
        String[] startstr = timeStr.split("-");
        if (!TextUtils.equals("1", startstr[1])) {
            sysEndYear = Integer.valueOf(startstr[0]);
            sysEndMonth = Integer.valueOf(startstr[1]) - 1;
        } else {
            sysEndYear = Integer.valueOf(startstr[0]) - 1;
            sysEndMonth = 12;
        }

    }

    @Override
    protected void initViews() {
        super.initViews();
        sysStartYear = 2021;
        sysStartMonth = 4;
//
//        sysEndYear = 2021;
//        sysEndMonth = 12;
        initTime();
        initStartTimeData();

        commitOrder = mRootView.findViewById(R.id.commit_order);
        commitOrder.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mContent.getShowEnergyHis() == 0) {
                    //如果用户选择不授权
                    mContent.setRemark(content_edit.getText().toString());
                    popWindow();
//                    EventBus.getDefault().post(new EventCenter<>(ArguConstant.PLACEORDER_GO_COMMIT));
                } else {
                    //如果用户选择授权，则验证时间是否为空
                    if (end_month_txt.getText().toString().startsWith("请选择")) {
                        ToastUtils.showShort("请完整选择时间");
                    } else {
                        mContent.setStartDate(start_month_txt.getText().toString() + "-01");
                        mContent.setEndDate(end_month_txt.getText().toString() + "-01");
                        mContent.setRemark(content_edit.getText().toString());
                        popWindow();
//                        EventBus.getDefault().post(new EventCenter<>(ArguConstant.PLACEORDER_GO_COMMIT));
                    }
                }
            }
        });

        radioGroup = mRootView.findViewById(R.id.radio_group);
        start_data = mRootView.findViewById(R.id.start_data);
        end_data = mRootView.findViewById(R.id.end_data);
        content_edit = mRootView.findViewById(R.id.content_edit);
        start_month_txt = mRootView.findViewById(R.id.start_month_txt);
        end_month_txt = mRootView.findViewById(R.id.end_month_txt);


        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                if (i == R.id.radio1) {
                    checkViewSet(true);
                    mContent.setShowEnergyHis(1);
                } else {
                    checkViewSet(false);
                    mContent.setShowEnergyHis(0);
                }
            }
        });

        //默认授权选择为是
        mContent.setShowEnergyHis(1);
        //正确设置方式 原因：注意事项有说明
        startDate.set(sysStartYear, sysStartMonth, 1);
        endDate.set(sysEndYear, sysEndMonth, 1);
        //时间选择器
        pvTime = new TimePickerBuilder(getContext(), new OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date, View v) {
                String time = TimeUtils.date2String(date, " yyyy-MM");
                time = time.replace(" ", "");
                userStartDate.set(Integer.valueOf(time.split("-")[0]), Integer.valueOf(time.split("-")[1]) - 1, 1);
                pvTimeEnd = new TimePickerBuilder(getContext(), new OnTimeSelectListener() {
                    @Override
                    public void onTimeSelect(Date date, View v) {
                        String timeEnd = TimeUtils.date2String(date, " yyyy-MM");
                        timeEnd = timeEnd.replace(" ", "");
                        end_month_txt.setText(timeEnd);
                    }
                }).setType(new boolean[]{true, true, false, false, false, false})

                        .setDecorView((ViewGroup) getActivity().getWindow().getDecorView().findViewById(android.R.id.content))
                        .setRangDate(userStartDate, endDate)
                        .build();
                start_month_txt.setText(time);
//                initEndTimeData();
            }
        }).setType(new boolean[]{true, true, false, false, false, false})

                .setDecorView((ViewGroup) getActivity().getWindow().getDecorView().findViewById(android.R.id.content))
                .setRangDate(startDate, endDate)
                .build();

//        //条件选择器
//        OptionsPickerView pvOptions = new OptionsPickerBuilder(getContext(), new OnOptionsSelectListener() {
//            @Override
//            public void onOptionsSelect(int options1, int options2, int options3, View v) {
//                if (isStartDataSelect) {
//                    start_month_txt.setText(yearList.get(options1) + "-" + monthList.get(options1).get(options2));
//                    userStartYear = yearList.get(options1);
//                    userStartMonth = monthList.get(options1).get(options2);
//                    initEndTimeData();
//                } else {
//                    end_month_txt.setText(yearListEnd.get(options1) + "-" + monthListEnd.get(options1).get(options2));
//                }
//            }
//        }).setDecorView((ViewGroup) getActivity().getWindow().getDecorView().findViewById(android.R.id.content)).build();


        start_data.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                isStartDataSelect = true;
//                startDate.set(sysStartYear, sysStartMonth, 1);
//                endDate.set(sysEndYear, sysEndMonth, 1);
                pvTime.show();

//                pvOptions.setPicker(yearList, monthList);
//                pvOptions.show();
            }
        });
        end_data.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                pvTimeEnd.show();
            }
        });

        content_edit.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                mContent.setRemark(editable.toString());
            }
        });
    }

    private void checkViewSet(boolean isAgree) {

        start_data.setClickable(isAgree);
        end_data.setClickable(isAgree);
        if (isAgree) {
            start_month_txt.setTextColor(0xFF333333);
            end_month_txt.setTextColor(0xFF333333);
        } else {
            start_month_txt.setTextColor(0xffDCDCDC);
            end_month_txt.setTextColor(0xffDCDCDC);
        }

    }


    private void initStartTimeData() {
        int position = 0;
        for (int year = sysStartYear; year < sysEndYear + 1; year++) {
            yearList.add(year);
            monthList.add(new ArrayList<>());
            for (int month = sysStartMonth; month < sysEndMonth + 1; month++) {
                monthList.get(position).add(month);
            }
            position++;
        }
    }


    private void initEndTimeData() {
        yearListEnd.clear();
        monthListEnd.clear();
        int position = 0;
        for (int year = userStartYear; year < sysEndYear + 1; year++) {
            yearListEnd.add(year);
            monthListEnd.add(new ArrayList<>());
            for (int month = userStartMonth; month < sysEndMonth + 1; month++) {
                monthListEnd.get(position).add(month);
            }

            position++;
        }
    }

    public OrderContentBean getmContent() {
        return mContent;
    }


    private void popWindow() {
        BasePopupView pop = null;
        pop = new XPopup.Builder(mContext)
                .isDestroyOnDismiss(false)
                .isViewMode(true)
                .autoOpenSoftInput(false)
                .asCustom(new DisclaimersPopView(getContext(), new DisclaimersPopView.OnListener() {
                    @Override
                    public void onPositiveClick(DisclaimersPopView pop, boolean ischeck) {
                        mPresenter.sendMessageCodeNew();//发送短信验证码
                        showMsgPop();
                    }
                }, "风险提示", disclaimer, "", "确认", true, true))
                .show();
    }


    private void showMsgPop() {
        tagOtherView = new TagOtherView(getContext(), new TagOtherView.OnListener() {
            @Override
            public void onPositiveClick(String msgCode) {
                if (TextUtils.isEmpty(msgCode)) {
                    ToastUtils.showShort("请填写短信验证码");
                } else {
                    mPresenter.verifyCode(msgCode);
//                            EventBus.getDefault().post(new EventCenter<>(ArguConstant.PLACEORDER_GO_COMMIT));
                }
            }

            @Override
            public void onCompleteClick(String code) {
                MsgCode = code;
            }

            @Override
            public void onReSendClick() {
//                ToastUtils.showShort("发送短信验证码");
                mPresenter.sendMessageCodeNew();//发送短信验证码
            }
        });
        BasePopupView pop = new XPopup.Builder(mContext)
                .isDestroyOnDismiss(false)
                .isViewMode(true)
                .autoOpenSoftInput(true)
                .dismissOnTouchOutside(false)
                .asCustom(tagOtherView)
                .show();
    }

    @Override
    protected AuthprizePresenter createPresenter() {
        return new AuthprizePresenter();
    }

    @Override
    public void sendMessageCodeSuccess(BaseResponse response) {
        if (TextUtils.equals("200", response.getCode())) {
//            showMsgPop();
        } else {
            ToastUtils.showLong(response.getMsg());
        }
    }

    @Override
    public void sendMessageCodeFailed() {
        ToastUtils.showShort("短信验证码发送失败");
    }

    @Override
    public void verifyCodeSuccess(BaseResponse response) {
        if (response != null) {
            if (TextUtils.equals("200", response.getCode())) {
                EventBus.getDefault().post(new EventCenter<>(ArguConstant.PLACEORDER_GO_COMMIT));
            } else {
                if (tagOtherView != null) {
                    tagOtherView.clearCode();
                }
                ToastUtils.showShort(response.getMsg());
            }
        } else {
            ToastUtils.showShort("接口有误");
        }

    }

    @Override
    public void verifyCodeFailed() {
        ToastUtils.showShort("短信验证码校验失败");
    }

    private String disclaimer = "各电力市场主体：\n" +
            "       在进行电力市场交易时，由于收益与风险共存，为了使各市场主体了解其中的风险，根据相关的法律法规和交易规则，特制定本风险告知书，请认真详细阅读，充分认识电力市场化交易的风险收益特征，认真考虑存在的各项风险因素，并充分考虑自身的风险承受能力，理性判断并谨慎作出决策。\n" +
            "       电力市场化交易可能存在的风险，包括但不限于如下风险：\n" +
            "一、宏观经济风险\n" +
            "       由于我国宏观经济形势变化、地区宏观经济环境和电力交易市场的变化、电力供需形势变化，可能会引起电力交易市场的波动，致使贵公司存在亏损的风险，将承担由此造成的损失。\n" +
            "二、法律和政策风险\n" +
            "       有关法律法规、国家政策和交易规则发生变化，以及政府对电力市场和监管政策的调整，都可能引起电力市场交易价格波动，致使贵公司存在亏损的风险，将承担由此造成的损失。\n" +
            "三、市场经营和信用风险\n" +
            "       由于市场主体所处行业整体经营形势变化和经营管理等因素，如市场主体经营不善、信用维护不足、经营决策重大失误、高级管理人员变更、重大诉讼等都有可能引起该市场主体电力市场价格的波动；由于市场主体经营不善会导致该市场主体中止交易或注销电力市场主体资格，贵公司将承担由此可能造成的损失。市场主体委托第三方机构或个人办理相关事项时，由于受委托方原因造成的损失，由市场主体和受委托方共同承担责任。\n" +
            "四、技术风险\n" +
            "       由于电力交易中心的交易撮合、清算交收、信息披露与电网公司信息系统接口、通讯技术、电脑技术和相关软件等存在着被网络黑客和计算机病毒攻击的可能，同时通讯技术、电脑技术和相关软件具有存在缺陷的可能，这些风险可能给该公司带来损失或交易撮合无法成交等风险。电力交易中心将着力化解，但可能会难以完全避免。\n" +
            "五、安全风险\n" +
            "       由于贵公司密码失密、操作不当、决策失误、公告查阅不及时等原因可能会使贵公司发生亏损；交易平台上操作完毕后未及时保存，致使未申报成功而造成的损失；交易平台上操作完毕后未及时退出，致使他人进行恶意操作而造成的损失；交易平台上交易未及时退出还可能遭遇黑客攻击或他人恶意操作，从而造成损失；上述损失都将由贵公司自行承担。在贵公司进行电力市场化交易时，委托他人代理电力交易，长期不关注账户变化有可能造成损失，他人给予贵公司的保证获利或不会发生亏损的任何承诺都是没有根据的，类似的承诺不会减少贵公司发生亏损的可能。\n" +
            "六、不可抗力因素导致的风险\n" +
            "       诸如地震、台风、火灾、水灾等不可抗力因素可能导致交易系统的瘫痪；电力交易市场无法控制和不可预测的系统故障、设备故障、通讯故障、电力故障等也可能导致电力交易信息系统非正常运行甚至瘫痪，这些都会使贵公司的交易委托无法成交或无法全部成交，贵公司将承担由此导致的损失和不便。\n" +
            "七、其他风险\n" +
            "       特别提示：电力交易中心敬告各市场主体，应当根据自身的经营情况和生产能力认真制定电力交易策略。电力市场化交易是一个风险无时不在的市场。贵公司在进行电力市场化交易时存\n" +
            "       在盈利的可能，也存在亏损的风险。本风险提示书并不能揭示从事电力市场化交易的全部风险及电力市场的全部情形。\n" +
            "       本风险告知通过电力交易平台互联网形式告知，请各市场主体仔细阅读，有清醒认识，认真考虑是否进行电力市场化交易。阅读后点击“已阅读”即为“已阅读《电力市场化交易风险告知书》并完全理解和同意，自愿承担电力市场交易中的各种风险引致的全部后果及损失”。";

}